繁体   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