簡體   English   中英

SQL Server 2008:使用存儲過程將變量插入DML語句

[英]SQL Server 2008: Insert variable into DML statements using Stored Procedure

我有以下程序:

CREATE PROCEDURE [dbo].[Test1] 
AS
BEGIN

INSERT INTO [My_Database].[My_Schema].[My_Table]
(...lists columns...)
SELECT ...  lots of columns from joined query... 

END

而不是硬編碼“[My_Database]。[My_Schema]”,我現在想要從預定義的表中選擇它作為變量,如下所示:

CREATE PROCEDURE [dbo].[Test1] 
AS
BEGIN

SELECT @myDB = [My_DB] FROM [my_custom_table]

--INSERT INTO [My_Database].[My_Schema].[My_Table]

INSERT INTO @myDB.[My_Table]
(...lists columns...)
SELECT ...  lots of columns from joined query... 

END

如果我像上面那樣使用它,它就不起作用。 我需要使用:EXEC sp_executesql(whole_sql_statement_in_quotes)

我的問題是我有很多這些程序要改為使用變量而不是硬編碼。 將每個語句轉換為長字符串需要花費很長時間。

還有其他方法嗎? 我錯過了什么?

問候

有一個想法,您可以在每個過程開始時使用動態SQL刪除並重新創建同義詞,然后您可以將每個Insert語句保留為Insert Into MySynonym

DROP SYNONYM MySynonym -- Must create it first before running this bit!

DECLARE @sql nvarchar(max)
SET @SQL = 'CREATE SYNONYM MySynonym
FOR ' + @myDB + '.test1'
EXEC sp_Executesql @sql

INSERT INTO MySynonym 
SELECT ...

這將為您提供一些代碼,您可以將粘貼復制到每個SP中。 如果要插入的表對於每個SP都不同,您也可以聲明它並將其構建到CREATE SYNONYM語句中

SET @SQL = 'CREATE SYNONYM MySynonym
FOR ' + @myDB + '.' + @MyTable

要先截斷每個表,您還需要使用DynamicSQL,因為您無法在同義詞上刪除

SET @SQL = 'Truncate Table ' + @MyTable
EXEC sp_Executesql @sql

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM